package com.wasin.server.util;

import cn.hutool.core.date.BetweenFormatter;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.diboot.core.util.D;

import java.util.Date;

/**
 * @ 作者： wasin
 * @ 创建时间： 2021/9/16  11:25
 * @ 说明：    时间工具类
 * @ 当前版本:  1.0.0
 */
public class DateUtils {
    /**
     * 获取当前时间
     * @return
     */
    public static String  getNow(){
        return D.now(D.FORMAT_DATETIME_Y4MDHM);
    }

    /**
     * 获取date的前几天
     * day 几天
     * @return
     */
    public static String getBefore(Date date,int day){
        DateTime dateTime = DateUtil.offsetDay(date, -day);
        return dateTime.toDateStr();
    }

    /**
     * 获取date的后几天
     * day 几天
     * @return
     */
    public static String getAfter(Date date,int day){
        DateTime dateTime = DateUtil.offsetDay(date, day);
        return dateTime.toDateStr();
    }

    /**
     * 获取当前时间前几个小时
     * @param hour
     * @return
     */
    public static String getBeforeHour(int hour){
        DateTime dateTime = DateUtil.offsetHour(new Date(), -hour);
        return dateTime.toDateStr();
    }

    /**
     * 获取当前时间后几个小时
     * @param hour
     * @return
     */
    public static String getAfterHour(int hour){
        DateTime dateTime = DateUtil.offsetHour(new Date(), hour);
        return dateTime.toDateStr();
    }

    /**
     * 获取一周、一月 前
     * @param type 1 一周前 2一月前
     * @return
     */
    public static String getBeforeWeekOrMONTH(int type){
        if(type==1){
            return DateUtil.lastWeek().toDateStr();
        }else{
            return DateUtil.lastMonth().toDateStr();
        }
    }

    /**
     * 获取一周、一月 后
     * @param type 1 一周后 2一月后
     * @return
     */
    public static String getAfterWeekOrMONTH(int type){
        if(type==1){
            return DateUtil.nextWeek().toDateStr();
        }else{
            return DateUtil.nextMonth().toDateStr();
        }
    }

    /**
     * 获取两个日期的时间差 精确到天数
     * @param date1
     * @param date2
     * @return
     */
    public static long getDateDifference(Date date1,Date date2){
        return DateUtil.between(date1, date2, DateUnit.DAY);
    }

    /**
     * 获取两个日期的时间差 精确到分
     * @param date1
     * @param date2
     * @return
     */
    public static String getDateDifferenceMinute(Date date1, Date date2){
        return DateUtil.formatBetween(date1, date2,BetweenFormatter.Level.MINUTE);
    }

    /**
     * 获取本月第一天
     * @return
     */
    public static String getThisMonth(){
      return DateUtil.beginOfMonth(new Date()).toDateStr()+" 00:00:00";
    }

    /**
     * 获取本月最后一天
     * @return
     */
    public static String getThisMonthLast(){
        return DateUtil.endOfMonth(new Date()).toDateStr()+" 23:59:59";
    }




    /**
     * 获取本周一的时间
     * @param
     * @return
     */
    public static String getThisWeek() {
        return DateUtil.beginOfWeek(new Date()).toDateStr()+" 00:00:00";
    }


    /**
     * 获取本周最后一天的时间
     * @param
     * @return
     */
    public static String getThisWeekLast() {
        return DateUtil.endOfWeek(new Date()).toDateStr()+" 23:59:59";
    }
}
